package ln.javatest.day17.demo01;
/*
函数式接口的使用：一般可以作为方法的参数和返回值类型
*/

public class Demo01 {
    //定义一个方法，参数使用函数式接口MyFunctionalInterface
    public static void show(MyFunctionalInterface myInter){
        myInter.method1();
    }

    public static void main(String[] args) {
        //调用show方法，方法的参数是一个接口，所以可以传递接口的实现类对象
        show(new MyFunctionalInterfaceImpl());
        //调用show方法，方法的参数是一个接口，所以我们可以传递接口的匿名内部类
        show(new MyFunctionalInterface() {
            @Override
            public void method1() {
                System.out.println("使用匿名内部类重写函数式接口中的抽象方法.");
            }
        });
        //调用show方法，方法的参数是一个函数式接口，所以我们可以Lambda表达式
        show(()->{
            System.out.println("使用Lambda表达式重写函数式接口中的抽象方法.");
        });
        //简化Lambda表达式
        //有多个参数可以省略参数的类型 没有参数不管  如果只有一个参数可以省略参数类型和括号
        //大括号中只有一个语句可以省略大括号 语句后的分号 如果有return 还可以省略return 这三个一起省略
        show(()->System.out.println("使用简化后的Lambda表达式重写函数式接口中的抽象方法."));
    }
}
